package com.example.common.utils;


import com.example.common.enums.FileType;
import java.io.IOException;
import java.io.InputStream;

public class FileTypeUtil {
    /**
     * @param value 表示文件类型
     * @return
     */
    public static String isFileType(FileType value) {
        String type = "other";// 其他
        // 图片
        FileType[] pics = {FileType.JPEG, FileType.PNG, FileType.GIF, FileType.TIFF, FileType.BMP, FileType.DWG, FileType.PSD};

        FileType[] docs = {FileType.RTF, FileType.XML, FileType.HTML, FileType.CSS, FileType.JS, FileType.EML, FileType.DBX, FileType.PST, FileType.XLS_DOC, FileType.XLSX_DOCX, FileType.VSD,
                FileType.MDB, FileType.WPS, FileType.WPD, FileType.EPS, FileType.PDF, FileType.QDF, FileType.PWL, FileType.ZIP, FileType.RAR, FileType.JSP, FileType.JAVA, FileType.CLASS,
                FileType.JAR, FileType.MF, FileType.EXE, FileType.CHM};

        FileType[] videos = {FileType.AVI, FileType.RAM, FileType.RM, FileType.MPG, FileType.MOV, FileType.ASF, FileType.MP4, FileType.FLV, FileType.MID};

        FileType[] tottents = {FileType.TORRENT};

        FileType[] audios = {FileType.WAV, FileType.MP3};

        FileType[] others = {};

        // 图片
        for (FileType fileType : pics) {
            if (fileType.equals(value)) {
                type = "img";
            }
        }
        // 文档
        for (FileType fileType : docs) {
            if (fileType.equals(value)) {
                type = "docs";
            }
        }
        // 视频
        for (FileType fileType : videos) {
            if (fileType.equals(value)) {
                type = "video";
            }
        }
        // 种子
        for (FileType fileType : tottents) {
            if (fileType.equals(value)) {
                type = "seed";
            }
        }
        // 音乐
        for (FileType fileType : audios) {
            if (fileType.equals(value)) {
                type = "audio";
            }
        }
        return type;
    }


    /**
     * 判断文件类型
     *
     *            文件路径
     * @return 文件类型
     */
    public static FileType getType(InputStream is) throws IOException {

        String fileHead = getFileContent(is);
        if (fileHead == null || fileHead.length() == 0) {
            return null;
        }
        fileHead = fileHead.toUpperCase();
        FileType[] fileTypes = FileType.values();

        for (FileType type : fileTypes) {
            if (fileHead.startsWith(type.getValue())) {
                return type;
            }
        }

        return null;
    }

    /**
     * 得到文件头
     *
     *            文件路径
     * @return 文件头
     * @throws IOException
     */
    private static String getFileContent(InputStream is) throws IOException {

        byte[] b = new byte[28];

        InputStream inputStream = null;

        try {
            is.read(b, 0, 28);
        } catch (IOException e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    throw e;
                }
            }
        }
        return bytesToHexString(b);
    }

    /**
     * 将文件头转换成16进制字符串
     * @return 16进制字符串
     */
    private static String bytesToHexString(byte[] src) {

        StringBuilder stringBuilder = new StringBuilder();
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }

    /**
     * 判断文件类型
     *
     *            文件路径
     * @return 文件类型
     */
    public static String getFileType(String fileName) throws IOException {
        String type = "other";// 其他
        // 图片
        String[] pics = {"JPEG","PNG", "GIF", "TIFF", "BMP", "DWG", "PSD","JPG" };

        String[] videos = {"AVI", "RAM", "RM", "MPG", "MOV", "ASF", "MP4", "FLV", "MID"};

        String[] audios = {"WAV", "MP3", "AMR","AAC","M4A","PCM"};

        FileType[] others = {};


        String fileType =  fileName.substring(fileName.lastIndexOf(".") +1 ,fileName.length()).toUpperCase();

        // 图片
        for (String item : pics) {
            if (fileType.equals(item)) {
                type = "img";
            }
        }
        // 视频
        for (String item : videos) {
            if (fileType.equals(item)) {
                type = "video";
            }
        }
        // 音乐
        for (String item : audios) {
            if (fileType.equals(item)) {
                type = "audio";
            }
        }
        return type;
    }
}